# 导入必要的库和模块
import numpy as np
import pickle
from gradio import GradioInterface
from PIL import Image
import io

# 加载保存的KNN模型，这样我们可以使用预训练的模型进行预测
with open('best_knn_model.pkl', 'rb') as file:
    knn = pickle.load(file)

# 定义预测函数，这个函数将用于Gradio接口进行预测
def predict_number(image):
    # 将图像转换为灰度
    image = image.convert('L')
    # 将PIL图像转换为numpy数组
    image_array = np.array(image)
    # 重塑数组以匹配模型输入的形状
    image_array = image_array.reshape(1, -1)
    # 使用KNN模型进行预测
    prediction = knn.predict(image_array)
    return f"Predicted number: {prediction[0]}"

# 创建Gradio接口，这个接口将用于用户输入和显示预测结果
iface = GradioInterface(
    fn=predict_number,
    inputs=gradio.inputs.Image(shape=(8, 8), image_mode='L', type="pil"),
    outputs="text"
)

# 启动Gradio接口，用户可以通过这个接口进行交互
iface.launch()